package com.linwen.dataStructure.list.arrayList;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
/**
 * List 的 subList 方法并没有创建一个新的List，而是使用的原List的视图，在视图上对List的操作会修改原List
 * 
 * CME是指checkForComodification方法被调用时modCount值不相等造成的，modCount记录了当前集合实际被修改的次数
 * 
 * 
 * */

public class ArrayListTest {

	public static void main(String[] args) {
		List nameList = new ArrayList<>();
		nameList.add("hello");
		nameList.add("world");
		nameList.add("my");
		System.out.println(nameList);
		Iterator iterator = nameList.iterator();
		while (iterator.hasNext()){
			String item = (String) iterator.next();
			System.out.println(item);
		}
		List test = nameList.subList(0, 2);
		System.out.println(test);
		test.add("god");
		System.out.println(test);
		System.out.println(nameList);
		nameList.add("???");
		System.out.println(nameList);
		
		//System.out.println(test); 会导致报错  foreach是jdk8 的特性，只适合用于对集合元素的迭代遍历，不适合于集合元素的
			//修改或者更新。
		System.out.println("======================");
		ArrayList<String> a = new ArrayList<>();
		ArrayList<String> b = new ArrayList<>();
		a.add("1");a.add("2");a.add("3");a.add("4");
		b.add("1");b.add("5");
		ArrayList<String> copy = new ArrayList<>();
		copy.addAll(a);
		System.out.println(a);
		System.out.println(b);
		a.removeAll(b);
		System.out.println(a);
		System.out.println(copy);
		b.removeAll(copy);
		System.out.println(b);

	}

}
